package com.scc.service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.scc.pojo.*;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Transactional(rollbackFor=Exception.class)
public interface AdminService {
    ///管理员信息操作
    //管理员搜索查询抽象方法
    Admin select(Admin admin);
    //管理员修改密码
    void updatePassword(Admin admin);

    /// ///员工信息操作
    //管理员添加新员工的抽象方法，无需返回值
    void addEmp(Emp emp);
    //表格展示，分页查询
    PageBean pageSearch(Integer page, Integer pageSize, String name, Integer gender, String account, LocalDate beginTime, LocalDate endTime);
    //删除用户的抽象方法
    void delete(Integer id);
    //批量删除用户的方法
    void deleteByIds(List<Integer> ids);
    //根据id获取一个用户的信息
    Emp getEmpMessage(Integer id);
    //修改员工信息的方法
    void modifyEmp(Emp emp);

    ///考勤日期的操作
    //获得所有用户的信息
    void getAllEmpMessage(String attendanceName, LocalDate attendanceDate, LocalDateTime endAttendanceTime);
    //查询所有考勤表的信息
    PageBean getAllAttendance(Integer page, Integer pageSize, String name, Integer gender, String account, Integer empAttendanceStatus, LocalDate attendanceDate);
    //根据id删除考勤表的信息
    void deleteAttendanceByIds(List<Integer> ids);
    //根据id扣除工资
    void deductSalary(String deductMessage) throws JsonProcessingException;

    ///员工请假系列操作
    //查询或者获取员工请假的所有信息
    PageBean getEmpLeaveMsg(Integer page, Integer pageSize, String name, Integer gender, String account, LocalDate startDate, LocalDate endDate);
    //跟据id来操作用户审批状态
    void modifyEmpLeaveApproveStatus(String approveStatusMsg) throws JsonProcessingException;

    ///员工离职系列操作
    //获取员工离职对象或者查询离职对象
    PageBean getEmpResignMsg(Integer page, Integer pageSize, String name, Integer gender, String account, LocalDate startDate, LocalDate endDate);

    //管理员审批员工离职申请的操作
    void modifyEmpResignApproveStatus(String resignApproveStatus) throws JsonProcessingException;

    ///管理员对团建活动的系列操作
    //获取团建活动信息
    PageBean getTeamBuildingActivitiesMsg(Integer page, Integer pageSize, String teamBuildingName, Integer activityStatus, LocalDateTime begin, LocalDateTime end);

    //添加团建活动
    void addTeamBuildingActivities(TeamBuildingActivities teamBuildingActivities);

    //删除团建活动
    void deleteTeamBuildingActivities(List<Integer> ids);

    //根据id获取团建活动的信息
    TeamBuildingActivities getTeamBuildingActivitiesMsgById(Integer id);

    //修改团建活动的信息
    void modifyTeamBuildingActivities(String teamBuildingActivities);

    //获取单个团建活动员工报名信息
    PageBean geEmpTeamBuildingActivitiesMsg(Integer id, Integer page, Integer pageSize, String name, Integer gender, String account, String activityDuration, LocalDateTime begin, LocalDateTime end, Integer empActivityStatus);

    //员工团建活动报名表的删除操作
    void deleteEmpTeamBuildingActivities(List<String> ids);

    ///管理员对于培训活动信息表的系列操作
    //培训活动信息表的获取和查询
    PageBean getTrainingActivities(Integer page, Integer pageSize, String trainingName, Integer activityStatus, LocalDate startTime, LocalDate endTime);

    //培训活动信息表的删除
    void deleteTrainingActivityByIds(List<Integer> ids);

    //根据id获取员工信息
    TrainingActivity getTrainingActivityMsgById(Integer id);

    //添加培训活动
    void addTrainingActivity(TrainingActivity trainingActivity);

    //修改培训活动
    void modifyTrainingActivity(TrainingActivity trainingActivity);

    //查询或者获取某一个培训活动的员工报名表
    PageBean getEmpTrainingActivity(Integer page, Integer pageSize, Integer id, String name, Integer gender, String account, LocalDateTime startTime, LocalDateTime endTime, Integer activityStatus, String activityDuration, Integer activityScore);

    //管理员根据员工账号删除员工培训报名表员工的信息
    void deleteEmpTrainingActivityByAccounts(List<String> accounts);

    //管理员对于参加培训活动的员工进行打分操作
    void modifyEmpTrainingActivityScore(String scoreMsg, String account);

    //获取员工培训分数操作
    Integer getEmpTrainingActivityScoreByAccount(String account, Integer id);

    //管理员结算员工工资
    void addEmpSalary(String empSalary);

    //管理员批量结算员工工资操作
    void addEmpSalaryByIds(List<Integer> ids, LocalDate salaryDate);

    //获取管理员信息更具账号
    void getAdminMsg(String account);

    //获取员工在线信息表的信息
    PageBean getEmpOnlineMsg(Integer page, Integer pageSize, String name, String account, LocalDate start, LocalDate end);

    //管理员根据id删除员工在线信息表的信息
    void deleteEmpOnlineMsgByIds(List<Integer> ids);
}
